home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / tex / tex31 / texsrc.lzh / TEXSRC.LZH / tex14.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-11-28  |  23.3 KB  |  1,018 lines

  1. #define EXTERN extern
  2. #include "texd.h"
  3.  
  4. void starteqno ( ) 
  5. {starteqno_regmem 
  6.   savestack [ saveptr + 0 ] .cint = curchr ; 
  7.   incr ( saveptr ) ; 
  8.   {
  9.     pushmath ( 15 ) ; 
  10.     eqworddefine ( 6207 , -1 ) ; 
  11.     if ( eqtb [ 4315 ] .hh .v.RH != 0 ) 
  12.     begintokenlist ( eqtb [ 4315 ] .hh .v.RH , 8 ) ; 
  13.   } 
  14. void zscanmath ( p ) 
  15. halfword p ; 
  16. {/* 20 21 10 */ scanmath_regmem 
  17.   integer c  ; 
  18.   lab20: do {
  19.       getxtoken () ; 
  20.   } while ( ! ( ( curcmd != 10 ) && ( curcmd != 0 ) ) ) ; 
  21.   lab21: switch ( curcmd ) 
  22.   {case 11 : 
  23.   case 12 : 
  24.   case 68 : 
  25.     {
  26.       c = eqtb [ 5907 + curchr ] .hh .v.RH ; 
  27.       if ( c == 32768L ) 
  28.       {
  29.     {
  30.       curcs = curchr + 1 ; 
  31.       curcmd = eqtb [ curcs ] .hh.b0 ; 
  32.       curchr = eqtb [ curcs ] .hh .v.RH ; 
  33.       xtoken () ; 
  34.       backinput () ; 
  35.     } 
  36.     goto lab20 ; 
  37.       } 
  38.     } 
  39.     break ; 
  40.   case 16 : 
  41.     {
  42.       scancharnum () ; 
  43.       curchr = curval ; 
  44.       curcmd = 68 ; 
  45.       goto lab21 ; 
  46.     } 
  47.     break ; 
  48.   case 17 : 
  49.     {
  50.       scanfifteenbitint () ; 
  51.       c = curval ; 
  52.     } 
  53.     break ; 
  54.   case 69 : 
  55.     c = curchr ; 
  56.     break ; 
  57.   case 15 : 
  58.     {
  59.       scantwentysevenbitint () ; 
  60.       c = curval / 4096 ; 
  61.     } 
  62.     break ; 
  63.     default: 
  64.     {
  65.       backinput () ; 
  66.       scanleftbrace () ; 
  67.       savestack [ saveptr + 0 ] .cint = p ; 
  68.       incr ( saveptr ) ; 
  69.       pushmath ( 9 ) ; 
  70.       return ; 
  71.     } 
  72.     break ; 
  73.   } 
  74.   mem [ p ] .hh .v.RH = 1 ; 
  75.   mem [ p ] .hh.b1 = c % 256 ; 
  76.   if ( ( c >= 28672 ) && ( ( eqtb [ 6207 ] .cint >= 0 ) && ( eqtb [ 6207 ] 
  77.   .cint < 16 ) ) ) 
  78.   mem [ p ] .hh.b0 = eqtb [ 6207 ] .cint ; 
  79.   else mem [ p ] .hh.b0 = ( c / 256 ) % 16 ; 
  80. void zsetmathchar ( c ) 
  81. integer c ; 
  82. {setmathchar_regmem 
  83.   halfword p  ; 
  84.   if ( c >= 32768L ) 
  85.   {
  86.     curcs = curchr + 1 ; 
  87.     curcmd = eqtb [ curcs ] .hh.b0 ; 
  88.     curchr = eqtb [ curcs ] .hh .v.RH ; 
  89.     xtoken () ; 
  90.     backinput () ; 
  91.   } 
  92.   else {
  93.       
  94.     p = newnoad () ; 
  95.     mem [ p + 1 ] .hh .v.RH = 1 ; 
  96.     mem [ p + 1 ] .hh.b1 = c % 256 ; 
  97.     mem [ p + 1 ] .hh.b0 = ( c / 256 ) % 16 ; 
  98.     if ( c >= 28672 ) 
  99.     {
  100.       if ( ( ( eqtb [ 6207 ] .cint >= 0 ) && ( eqtb [ 6207 ] .cint < 16 ) ) ) 
  101.       mem [ p + 1 ] .hh.b0 = eqtb [ 6207 ] .cint ; 
  102.       mem [ p ] .hh.b0 = 16 ; 
  103.     } 
  104.     else mem [ p ] .hh.b0 = 16 + ( c / 4096 ) ; 
  105.     mem [ curlist .tailfield ] .hh .v.RH = p ; 
  106.     curlist .tailfield = p ; 
  107.   } 
  108. void mathlimitswitch ( ) 
  109. {/* 10 */ mathlimitswitch_regmem 
  110.   if ( curlist .headfield != curlist .tailfield ) 
  111.   if ( mem [ curlist .tailfield ] .hh.b0 == 17 ) 
  112.   {
  113.     mem [ curlist .tailfield ] .hh.b1 = curchr ; 
  114.     return ; 
  115.   } 
  116.   {
  117.     if ( interaction == 3 ) 
  118.     wakeupterminal () ; 
  119.     printnl ( 262 ) ; 
  120.     print ( 1123 ) ; 
  121.   } 
  122.   {
  123.     helpptr = 1 ; 
  124.     helpline [ 0 ] = 1124 ; 
  125.   } 
  126.   error () ; 
  127. void zscandelimiter ( p , r ) 
  128. halfword p ; 
  129. boolean r ; 
  130. {scandelimiter_regmem 
  131.   if ( r ) 
  132.   scantwentysevenbitint () ; 
  133.   else {
  134.       
  135.     do {
  136.     getxtoken () ; 
  137.     } while ( ! ( ( curcmd != 10 ) && ( curcmd != 0 ) ) ) ; 
  138.     switch ( curcmd ) 
  139.     {case 11 : 
  140.     case 12 : 
  141.       curval = eqtb [ 6474 + curchr ] .cint ; 
  142.       break ; 
  143.     case 15 : 
  144.       scantwentysevenbitint () ; 
  145.       break ; 
  146.       default: 
  147.       curval = -1 ; 
  148.       break ; 
  149.     } 
  150.   } 
  151.   if ( curval < 0 ) 
  152.   {
  153.     {
  154.       if ( interaction == 3 ) 
  155.       wakeupterminal () ; 
  156.       printnl ( 262 ) ; 
  157.       print ( 1125 ) ; 
  158.     } 
  159.     {
  160.       helpptr = 6 ; 
  161.       helpline [ 5 ] = 1126 ; 
  162.       helpline [ 4 ] = 1127 ; 
  163.       helpline [ 3 ] = 1128 ; 
  164.       helpline [ 2 ] = 1129 ; 
  165.       helpline [ 1 ] = 1130 ; 
  166.       helpline [ 0 ] = 1131 ; 
  167.     } 
  168.     backerror () ; 
  169.     curval = 0 ; 
  170.   } 
  171.   mem [ p ] .qqqq .b0 = ( curval / 1048576L ) % 16 ; 
  172.   mem [ p ] .qqqq .b1 = ( curval / 4096 ) % 256 ; 
  173.   mem [ p ] .qqqq .b2 = ( curval / 256 ) % 16 ; 
  174.   mem [ p ] .qqqq .b3 = curval % 256 ; 
  175. void mathradical ( ) 
  176. {mathradical_regmem 
  177.   {
  178.     mem [ curlist .tailfield ] .hh .v.RH = getnode ( 5 ) ; 
  179.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  180.   } 
  181.   mem [ curlist .tailfield ] .hh.b0 = 24 ; 
  182.   mem [ curlist .tailfield ] .hh.b1 = 0 ; 
  183.   mem [ curlist .tailfield + 1 ] .hh = emptyfield ; 
  184.   mem [ curlist .tailfield + 3 ] .hh = emptyfield ; 
  185.   mem [ curlist .tailfield + 2 ] .hh = emptyfield ; 
  186.   scandelimiter ( curlist .tailfield + 4 , true ) ; 
  187.   scanmath ( curlist .tailfield + 1 ) ; 
  188. void mathac ( ) 
  189. {mathac_regmem 
  190.   if ( curcmd == 45 ) 
  191.   {
  192.     {
  193.       if ( interaction == 3 ) 
  194.       wakeupterminal () ; 
  195.       printnl ( 262 ) ; 
  196.       print ( 1132 ) ; 
  197.     } 
  198.     printesc ( 519 ) ; 
  199.     print ( 1133 ) ; 
  200.     {
  201.       helpptr = 2 ; 
  202.       helpline [ 1 ] = 1134 ; 
  203.       helpline [ 0 ] = 1135 ; 
  204.     } 
  205.     error () ; 
  206.   } 
  207.   {
  208.     mem [ curlist .tailfield ] .hh .v.RH = getnode ( 5 ) ; 
  209.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  210.   } 
  211.   mem [ curlist .tailfield ] .hh.b0 = 28 ; 
  212.   mem [ curlist .tailfield ] .hh.b1 = 0 ; 
  213.   mem [ curlist .tailfield + 1 ] .hh = emptyfield ; 
  214.   mem [ curlist .tailfield + 3 ] .hh = emptyfield ; 
  215.   mem [ curlist .tailfield + 2 ] .hh = emptyfield ; 
  216.   mem [ curlist .tailfield + 4 ] .hh .v.RH = 1 ; 
  217.   scanfifteenbitint () ; 
  218.   mem [ curlist .tailfield + 4 ] .hh.b1 = curval % 256 ; 
  219.   if ( ( curval >= 28672 ) && ( ( eqtb [ 6207 ] .cint >= 0 ) && ( eqtb [ 6207 
  220.   ] .cint < 16 ) ) ) 
  221.   mem [ curlist .tailfield + 4 ] .hh.b0 = eqtb [ 6207 ] .cint ; 
  222.   else mem [ curlist .tailfield + 4 ] .hh.b0 = ( curval / 256 ) % 16 ; 
  223.   scanmath ( curlist .tailfield + 1 ) ; 
  224. void appendchoices ( ) 
  225. {appendchoices_regmem 
  226.   {
  227.     mem [ curlist .tailfield ] .hh .v.RH = newchoice () ; 
  228.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  229.   } 
  230.   incr ( saveptr ) ; 
  231.   savestack [ saveptr - 1 ] .cint = 0 ; 
  232.   pushmath ( 13 ) ; 
  233.   scanleftbrace () ; 
  234. halfword zfinmlist ( p ) 
  235. halfword p ; 
  236. {register halfword Result; finmlist_regmem 
  237.   halfword q  ; 
  238.   if ( curlist .auxfield .cint != 0 ) 
  239.   {
  240.     mem [ curlist .auxfield .cint + 3 ] .hh .v.RH = 3 ; 
  241.     mem [ curlist .auxfield .cint + 3 ] .hh .v.LH = mem [ curlist .headfield ] 
  242.     .hh .v.RH ; 
  243.     if ( p == 0 ) 
  244.     q = curlist .auxfield .cint ; 
  245.     else {
  246.     
  247.       q = mem [ curlist .auxfield .cint + 2 ] .hh .v.LH ; 
  248.       if ( mem [ q ] .hh.b0 != 30 ) 
  249.       confusion ( 870 ) ; 
  250.       mem [ curlist .auxfield .cint + 2 ] .hh .v.LH = mem [ q ] .hh .v.RH ; 
  251.       mem [ q ] .hh .v.RH = curlist .auxfield .cint ; 
  252.       mem [ curlist .auxfield .cint ] .hh .v.RH = p ; 
  253.     } 
  254.   } 
  255.   else {
  256.       
  257.     mem [ curlist .tailfield ] .hh .v.RH = p ; 
  258.     q = mem [ curlist .headfield ] .hh .v.RH ; 
  259.   } 
  260.   popnest () ; 
  261.   Result = q ; 
  262.   return(Result) ; 
  263. void buildchoices ( ) 
  264. {/* 10 */ buildchoices_regmem 
  265.   halfword p  ; 
  266.   unsave () ; 
  267.   p = finmlist ( 0 ) ; 
  268.   switch ( savestack [ saveptr - 1 ] .cint ) 
  269.   {case 0 : 
  270.     mem [ curlist .tailfield + 1 ] .hh .v.LH = p ; 
  271.     break ; 
  272.   case 1 : 
  273.     mem [ curlist .tailfield + 1 ] .hh .v.RH = p ; 
  274.     break ; 
  275.   case 2 : 
  276.     mem [ curlist .tailfield + 2 ] .hh .v.LH = p ; 
  277.     break ; 
  278.   case 3 : 
  279.     {
  280.       mem [ curlist .tailfield + 2 ] .hh .v.RH = p ; 
  281.       decr ( saveptr ) ; 
  282.       return ; 
  283.     } 
  284.     break ; 
  285.   } 
  286.   incr ( savestack [ saveptr - 1 ] .cint ) ; 
  287.   pushmath ( 13 ) ; 
  288.   scanleftbrace () ; 
  289. void subsup ( ) 
  290. {subsup_regmem 
  291.   smallnumber t  ; 
  292.   halfword p  ; 
  293.   t = 0 ; 
  294.   p = 0 ; 
  295.   if ( curlist .tailfield != curlist .headfield ) 
  296.   if ( ( mem [ curlist .tailfield ] .hh.b0 >= 16 ) && ( mem [ curlist 
  297.   .tailfield ] .hh.b0 < 30 ) ) 
  298.   {
  299.     p = curlist .tailfield + 2 + curcmd - 7 ; 
  300.     t = mem [ p ] .hh .v.RH ; 
  301.   } 
  302.   if ( ( p == 0 ) || ( t != 0 ) ) 
  303.   {
  304.     {
  305.       mem [ curlist .tailfield ] .hh .v.RH = newnoad () ; 
  306.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  307.     } 
  308.     p = curlist .tailfield + 2 + curcmd - 7 ; 
  309.     if ( t != 0 ) 
  310.     {
  311.       if ( curcmd == 7 ) 
  312.       {
  313.     {
  314.       if ( interaction == 3 ) 
  315.       wakeupterminal () ; 
  316.       printnl ( 262 ) ; 
  317.       print ( 1136 ) ; 
  318.     } 
  319.     {
  320.       helpptr = 1 ; 
  321.       helpline [ 0 ] = 1137 ; 
  322.     } 
  323.       } 
  324.       else {
  325.       
  326.     {
  327.       if ( interaction == 3 ) 
  328.       wakeupterminal () ; 
  329.       printnl ( 262 ) ; 
  330.       print ( 1138 ) ; 
  331.     } 
  332.     {
  333.       helpptr = 1 ; 
  334.       helpline [ 0 ] = 1139 ; 
  335.     } 
  336.       } 
  337.       error () ; 
  338.     } 
  339.   } 
  340.   scanmath ( p ) ; 
  341. void mathfraction ( ) 
  342. {mathfraction_regmem 
  343.   smallnumber c  ; 
  344.   c = curchr ; 
  345.   if ( curlist .auxfield .cint != 0 ) 
  346.   {
  347.     if ( c >= 3 ) 
  348.     {
  349.       scandelimiter ( memtop - 12 , false ) ; 
  350.       scandelimiter ( memtop - 12 , false ) ; 
  351.     } 
  352.     if ( c % 3 == 0 ) 
  353.     scandimen ( false , false , false ) ; 
  354.     {
  355.       if ( interaction == 3 ) 
  356.       wakeupterminal () ; 
  357.       printnl ( 262 ) ; 
  358.       print ( 1146 ) ; 
  359.     } 
  360.     {
  361.       helpptr = 3 ; 
  362.       helpline [ 2 ] = 1147 ; 
  363.       helpline [ 1 ] = 1148 ; 
  364.       helpline [ 0 ] = 1149 ; 
  365.     } 
  366.     error () ; 
  367.   } 
  368.   else {
  369.       
  370.     curlist .auxfield .cint = getnode ( 6 ) ; 
  371.     mem [ curlist .auxfield .cint ] .hh.b0 = 25 ; 
  372.     mem [ curlist .auxfield .cint ] .hh.b1 = 0 ; 
  373.     mem [ curlist .auxfield .cint + 2 ] .hh .v.RH = 3 ; 
  374.     mem [ curlist .auxfield .cint + 2 ] .hh .v.LH = mem [ curlist .headfield ] 
  375.     .hh .v.RH ; 
  376.     mem [ curlist .auxfield .cint + 3 ] .hh = emptyfield ; 
  377.     mem [ curlist .auxfield .cint + 4 ] .qqqq = nulldelimiter ; 
  378.     mem [ curlist .auxfield .cint + 5 ] .qqqq = nulldelimiter ; 
  379.     mem [ curlist .headfield ] .hh .v.RH = 0 ; 
  380.     curlist .tailfield = curlist .headfield ; 
  381.     if ( c >= 3 ) 
  382.     {
  383.       scandelimiter ( curlist .auxfield .cint + 4 , false ) ; 
  384.       scandelimiter ( curlist .auxfield .cint + 5 , false ) ; 
  385.     } 
  386.     switch ( c % 3 ) 
  387.     {case 0 : 
  388.       {
  389.     scandimen ( false , false , false ) ; 
  390.     mem [ curlist .auxfield .cint + 1 ] .cint = curval ; 
  391.       } 
  392.       break ; 
  393.     case 1 : 
  394.       mem [ curlist .auxfield .cint + 1 ] .cint = 1073741824L ; 
  395.       break ; 
  396.     case 2 : 
  397.       mem [ curlist .auxfield .cint + 1 ] .cint = 0 ; 
  398.       break ; 
  399.     } 
  400.   } 
  401. void mathleftright ( ) 
  402. {mathleftright_regmem 
  403.   smallnumber t  ; 
  404.   halfword p  ; 
  405.   t = curchr ; 
  406.   if ( ( t == 31 ) && ( curgroup != 16 ) ) 
  407.   {
  408.     if ( curgroup == 15 ) 
  409.     {
  410.       scandelimiter ( memtop - 12 , false ) ; 
  411.       {
  412.     if ( interaction == 3 ) 
  413.     wakeupterminal () ; 
  414.     printnl ( 262 ) ; 
  415.     print ( 772 ) ; 
  416.       } 
  417.       printesc ( 870 ) ; 
  418.       {
  419.     helpptr = 1 ; 
  420.     helpline [ 0 ] = 1150 ; 
  421.       } 
  422.       error () ; 
  423.     } 
  424.     else offsave () ; 
  425.   } 
  426.   else {
  427.       
  428.     p = newnoad () ; 
  429.     mem [ p ] .hh.b0 = t ; 
  430.     scandelimiter ( p + 1 , false ) ; 
  431.     if ( t == 30 ) 
  432.     {
  433.       pushmath ( 16 ) ; 
  434.       mem [ curlist .headfield ] .hh .v.RH = p ; 
  435.       curlist .tailfield = p ; 
  436.     } 
  437.     else {
  438.     
  439.       p = finmlist ( p ) ; 
  440.       unsave () ; 
  441.       {
  442.     mem [ curlist .tailfield ] .hh .v.RH = newnoad () ; 
  443.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  444.       } 
  445.       mem [ curlist .tailfield ] .hh.b0 = 23 ; 
  446.       mem [ curlist .tailfield + 1 ] .hh .v.RH = 3 ; 
  447.       mem [ curlist .tailfield + 1 ] .hh .v.LH = p ; 
  448.     } 
  449.   } 
  450. void aftermath ( ) 
  451. {aftermath_regmem 
  452.   boolean l  ; 
  453.   boolean danger  ; 
  454.   integer m  ; 
  455.   halfword p  ; 
  456.   halfword a  ; 
  457.   halfword b  ; 
  458.   scaled w  ; 
  459.   scaled z  ; 
  460.   scaled e  ; 
  461.   scaled q  ; 
  462.   scaled d  ; 
  463.   scaled s  ; 
  464.   smallnumber g1, g2  ; 
  465.   halfword r  ; 
  466.   halfword t  ; 
  467.   danger = false ; 
  468.   if ( ( fontparams [ eqtb [ 4837 ] .hh .v.RH ] < 22 ) || ( fontparams [ eqtb 
  469.   [ 4853 ] .hh .v.RH ] < 22 ) || ( fontparams [ eqtb [ 4869 ] .hh .v.RH ] < 22 
  470.   ) ) 
  471.   {
  472.     {
  473.       if ( interaction == 3 ) 
  474.       wakeupterminal () ; 
  475.       printnl ( 262 ) ; 
  476.       print ( 1151 ) ; 
  477.     } 
  478.     {
  479.       helpptr = 3 ; 
  480.       helpline [ 2 ] = 1152 ; 
  481.       helpline [ 1 ] = 1153 ; 
  482.       helpline [ 0 ] = 1154 ; 
  483.     } 
  484.     error () ; 
  485.     flushmath () ; 
  486.     danger = true ; 
  487.   } 
  488.   else if ( ( fontparams [ eqtb [ 4838 ] .hh .v.RH ] < 13 ) || ( fontparams [ 
  489.   eqtb [ 4854 ] .hh .v.RH ] < 13 ) || ( fontparams [ eqtb [ 4870 ] .hh .v.RH ] 
  490.   < 13 ) ) 
  491.   {
  492.     {
  493.       if ( interaction == 3 ) 
  494.       wakeupterminal () ; 
  495.       printnl ( 262 ) ; 
  496.       print ( 1155 ) ; 
  497.     } 
  498.     {
  499.       helpptr = 3 ; 
  500.       helpline [ 2 ] = 1156 ; 
  501.       helpline [ 1 ] = 1157 ; 
  502.       helpline [ 0 ] = 1158 ; 
  503.     } 
  504.     error () ; 
  505.     flushmath () ; 
  506.     danger = true ; 
  507.   } 
  508.   m = curlist .modefield ; 
  509.   l = false ; 
  510.   p = finmlist ( 0 ) ; 
  511.   if ( curlist .modefield == - (integer) m ) 
  512.   {
  513.     {
  514.       getxtoken () ; 
  515.       if ( curcmd != 3 ) 
  516.       {
  517.     {
  518.       if ( interaction == 3 ) 
  519.       wakeupterminal () ; 
  520.       printnl ( 262 ) ; 
  521.       print ( 1159 ) ; 
  522.     } 
  523.     {
  524.       helpptr = 2 ; 
  525.       helpline [ 1 ] = 1160 ; 
  526.       helpline [ 0 ] = 1161 ; 
  527.     } 
  528.     backerror () ; 
  529.       } 
  530.     } 
  531.     curmlist = p ; 
  532.     curstyle = 2 ; 
  533.     mlistpenalties = false ; 
  534.     mlisttohlist () ; 
  535.     a = hpack ( mem [ memtop - 3 ] .hh .v.RH , 0 , 1 ) ; 
  536.     unsave () ; 
  537.     decr ( saveptr ) ; 
  538.     if ( savestack [ saveptr + 0 ] .cint == 1 ) 
  539.     l = true ; 
  540.     danger = false ; 
  541.     if ( ( fontparams [ eqtb [ 4837 ] .hh .v.RH ] < 22 ) || ( fontparams [ 
  542.     eqtb [ 4853 ] .hh .v.RH ] < 22 ) || ( fontparams [ eqtb [ 4869 ] .hh .v.RH 
  543.     ] < 22 ) ) 
  544.     {
  545.       {
  546.     if ( interaction == 3 ) 
  547.     wakeupterminal () ; 
  548.     printnl ( 262 ) ; 
  549.     print ( 1151 ) ; 
  550.       } 
  551.       {
  552.     helpptr = 3 ; 
  553.     helpline [ 2 ] = 1152 ; 
  554.     helpline [ 1 ] = 1153 ; 
  555.     helpline [ 0 ] = 1154 ; 
  556.       } 
  557.       error () ; 
  558.       flushmath () ; 
  559.       danger = true ; 
  560.     } 
  561.     else if ( ( fontparams [ eqtb [ 4838 ] .hh .v.RH ] < 13 ) || ( fontparams 
  562.     [ eqtb [ 4854 ] .hh .v.RH ] < 13 ) || ( fontparams [ eqtb [ 4870 ] .hh 
  563.     .v.RH ] < 13 ) ) 
  564.     {
  565.       {
  566.     if ( interaction == 3 ) 
  567.     wakeupterminal () ; 
  568.     printnl ( 262 ) ; 
  569.     print ( 1155 ) ; 
  570.       } 
  571.       {
  572.     helpptr = 3 ; 
  573.     helpline [ 2 ] = 1156 ; 
  574.     helpline [ 1 ] = 1157 ; 
  575.     helpline [ 0 ] = 1158 ; 
  576.       } 
  577.       error () ; 
  578.       flushmath () ; 
  579.       danger = true ; 
  580.     } 
  581.     m = curlist .modefield ; 
  582.     p = finmlist ( 0 ) ; 
  583.   } 
  584.   else a = 0 ; 
  585.   if ( m < 0 ) 
  586.   {
  587.     {
  588.       mem [ curlist .tailfield ] .hh .v.RH = newmath ( eqtb [ 6731 ] .cint , 0 
  589.       ) ; 
  590.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  591.     } 
  592.     curmlist = p ; 
  593.     curstyle = 2 ; 
  594.     mlistpenalties = ( curlist .modefield > 0 ) ; 
  595.     mlisttohlist () ; 
  596.     mem [ curlist .tailfield ] .hh .v.RH = mem [ memtop - 3 ] .hh .v.RH ; 
  597.     while ( mem [ curlist .tailfield ] .hh .v.RH != 0 ) curlist .tailfield = 
  598.     mem [ curlist .tailfield ] .hh .v.RH ; 
  599.     {
  600.       mem [ curlist .tailfield ] .hh .v.RH = newmath ( eqtb [ 6731 ] .cint , 1 
  601.       ) ; 
  602.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  603.     } 
  604.     curlist .auxfield .hh .v.LH = 1000 ; 
  605.     unsave () ; 
  606.   } 
  607.   else {
  608.       
  609.     if ( a == 0 ) 
  610.     {
  611.       getxtoken () ; 
  612.       if ( curcmd != 3 ) 
  613.       {
  614.     {
  615.       if ( interaction == 3 ) 
  616.       wakeupterminal () ; 
  617.       printnl ( 262 ) ; 
  618.       print ( 1159 ) ; 
  619.     } 
  620.     {
  621.       helpptr = 2 ; 
  622.       helpline [ 1 ] = 1160 ; 
  623.       helpline [ 0 ] = 1161 ; 
  624.     } 
  625.     backerror () ; 
  626.       } 
  627.     } 
  628.     curmlist = p ; 
  629.     curstyle = 0 ; 
  630.     mlistpenalties = false ; 
  631.     mlisttohlist () ; 
  632.     p = mem [ memtop - 3 ] .hh .v.RH ; 
  633.     adjusttail = memtop - 5 ; 
  634.     b = hpack ( p , 0 , 1 ) ; 
  635.     p = mem [ b + 5 ] .hh .v.RH ; 
  636.     t = adjusttail ; 
  637.     adjusttail = 0 ; 
  638.     w = mem [ b + 1 ] .cint ; 
  639.     z = eqtb [ 6744 ] .cint ; 
  640.     s = eqtb [ 6745 ] .cint ; 
  641.     if ( ( a == 0 ) || danger ) 
  642.     {
  643.       e = 0 ; 
  644.       q = 0 ; 
  645.     } 
  646.     else {
  647.     
  648.       e = mem [ a + 1 ] .cint ; 
  649.       q = e + fontinfo [ 6 + parambase [ eqtb [ 4837 ] .hh .v.RH ] ] .cint ; 
  650.     } 
  651.     if ( w + q > z ) 
  652.     {
  653.       if ( ( e != 0 ) && ( ( w - totalshrink [ 0 ] + q <= z ) || ( totalshrink 
  654.       [ 1 ] != 0 ) || ( totalshrink [ 2 ] != 0 ) || ( totalshrink [ 3 ] != 0 ) 
  655.       ) ) 
  656.       {
  657.     freenode ( b , 7 ) ; 
  658.     b = hpack ( p , z - q , 0 ) ; 
  659.       } 
  660.       else {
  661.       
  662.     e = 0 ; 
  663.     if ( w > z ) 
  664.     {
  665.       freenode ( b , 7 ) ; 
  666.       b = hpack ( p , z , 0 ) ; 
  667.     } 
  668.       } 
  669.       w = mem [ b + 1 ] .cint ; 
  670.     } 
  671.     d = half ( z - w ) ; 
  672.     if ( ( e > 0 ) && ( d < 2 * e ) ) 
  673.     {
  674.       d = half ( z - w - e ) ; 
  675.       if ( p != 0 ) 
  676.       if ( ! ( p >= himemmin ) ) 
  677.       if ( mem [ p ] .hh.b0 == 10 ) 
  678.       d = 0 ; 
  679.     } 
  680.     {
  681.       mem [ curlist .tailfield ] .hh .v.RH = newpenalty ( eqtb [ 6174 ] .cint 
  682.       ) ; 
  683.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  684.     } 
  685.     if ( ( d + s <= eqtb [ 6743 ] .cint ) || l ) 
  686.     {
  687.       g1 = 3 ; 
  688.       g2 = 4 ; 
  689.     } 
  690.     else {
  691.     
  692.       g1 = 5 ; 
  693.       g2 = 6 ; 
  694.     } 
  695.     if ( l && ( e == 0 ) ) 
  696.     {
  697.       mem [ a + 4 ] .cint = s ; 
  698.       appendtovlist ( a ) ; 
  699.       {
  700.     mem [ curlist .tailfield ] .hh .v.RH = newpenalty ( 10000 ) ; 
  701.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  702.       } 
  703.     } 
  704.     else {
  705.     
  706.       mem [ curlist .tailfield ] .hh .v.RH = newparamglue ( g1 ) ; 
  707.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  708.     } 
  709.     if ( e != 0 ) 
  710.     {
  711.       r = newkern ( z - w - e - d ) ; 
  712.       if ( l ) 
  713.       {
  714.     mem [ a ] .hh .v.RH = r ; 
  715.     mem [ r ] .hh .v.RH = b ; 
  716.     b = a ; 
  717.     d = 0 ; 
  718.       } 
  719.       else {
  720.       
  721.     mem [ b ] .hh .v.RH = r ; 
  722.     mem [ r ] .hh .v.RH = a ; 
  723.       } 
  724.       b = hpack ( b , 0 , 1 ) ; 
  725.     } 
  726.     mem [ b + 4 ] .cint = s + d ; 
  727.     appendtovlist ( b ) ; 
  728.     if ( ( a != 0 ) && ( e == 0 ) && ! l ) 
  729.     {
  730.       {
  731.     mem [ curlist .tailfield ] .hh .v.RH = newpenalty ( 10000 ) ; 
  732.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  733.       } 
  734.       mem [ a + 4 ] .cint = s + z - mem [ a + 1 ] .cint ; 
  735.       appendtovlist ( a ) ; 
  736.       g2 = 0 ; 
  737.     } 
  738.     if ( t != memtop - 5 ) 
  739.     {
  740.       mem [ curlist .tailfield ] .hh .v.RH = mem [ memtop - 5 ] .hh .v.RH ; 
  741.       curlist .tailfield = t ; 
  742.     } 
  743.     {
  744.       mem [ curlist .tailfield ] .hh .v.RH = newpenalty ( eqtb [ 6175 ] .cint 
  745.       ) ; 
  746.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  747.     } 
  748.     if ( g2 > 0 ) 
  749.     {
  750.       mem [ curlist .tailfield ] .hh .v.RH = newparamglue ( g2 ) ; 
  751.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  752.     } 
  753.     resumeafterdisplay () ; 
  754.   } 
  755. void resumeafterdisplay ( ) 
  756. {resumeafterdisplay_regmem 
  757.   if ( curgroup != 15 ) 
  758.   confusion ( 1162 ) ; 
  759.   unsave () ; 
  760.   curlist .pgfield = curlist .pgfield + 3 ; 
  761.   pushnest () ; 
  762.   curlist .modefield = 102 ; 
  763.   curlist .auxfield .hh .v.LH = 1000 ; 
  764.   curlist .auxfield .hh .v.RH = 0 ; 
  765.   {
  766.     getxtoken () ; 
  767.     if ( curcmd != 10 ) 
  768.     backinput () ; 
  769.   } 
  770.   if ( nestptr == 1 ) 
  771.   buildpage () ; 
  772. void getrtoken ( ) 
  773. {/* 20 */ getrtoken_regmem 
  774.   lab20: do {
  775.       gettoken () ; 
  776.   } while ( ! ( curtok != 2592 ) ) ; 
  777.   if ( ( curcs == 0 ) || ( curcs > 3514 ) ) 
  778.   {
  779.     {
  780.       if ( interaction == 3 ) 
  781.       wakeupterminal () ; 
  782.       printnl ( 262 ) ; 
  783.       print ( 1177 ) ; 
  784.     } 
  785.     {
  786.       helpptr = 5 ; 
  787.       helpline [ 4 ] = 1178 ; 
  788.       helpline [ 3 ] = 1179 ; 
  789.       helpline [ 2 ] = 1180 ; 
  790.       helpline [ 1 ] = 1181 ; 
  791.       helpline [ 0 ] = 1182 ; 
  792.     } 
  793.     if ( curcs == 0 ) 
  794.     backinput () ; 
  795.     curtok = 7609 ; 
  796.     inserror () ; 
  797.     goto lab20 ; 
  798.   } 
  799. void trapzeroglue ( ) 
  800. {trapzeroglue_regmem 
  801.   if ( ( mem [ curval + 1 ] .cint == 0 ) && ( mem [ curval + 2 ] .cint == 0 ) 
  802.   && ( mem [ curval + 3 ] .cint == 0 ) ) 
  803.   {
  804.     incr ( mem [ 0 ] .hh .v.RH ) ; 
  805.     deleteglueref ( curval ) ; 
  806.     curval = 0 ; 
  807.   } 
  808. void zdoregistercommand ( a ) 
  809. smallnumber a ; 
  810. {/* 40 10 */ doregistercommand_regmem 
  811.   halfword l, q, r, s  ; 
  812.   schar p  ; 
  813.   q = curcmd ; 
  814.   {
  815.     if ( q != 89 ) 
  816.     {
  817.       getxtoken () ; 
  818.       if ( ( curcmd >= 73 ) && ( curcmd <= 76 ) ) 
  819.       {
  820.     l = curchr ; 
  821.     p = curcmd - 73 ; 
  822.     goto lab40 ; 
  823.       } 
  824.       if ( curcmd != 89 ) 
  825.       {
  826.     {
  827.       if ( interaction == 3 ) 
  828.       wakeupterminal () ; 
  829.       printnl ( 262 ) ; 
  830.       print ( 681 ) ; 
  831.     } 
  832.     printcmdchr ( curcmd , curchr ) ; 
  833.     print ( 682 ) ; 
  834.     printcmdchr ( q , 0 ) ; 
  835.     {
  836.       helpptr = 1 ; 
  837.       helpline [ 0 ] = 1203 ; 
  838.     } 
  839.     error () ; 
  840.     return ; 
  841.       } 
  842.     } 
  843.     p = curchr ; 
  844.     scaneightbitint () ; 
  845.     switch ( p ) 
  846.     {case 0 : 
  847.       l = curval + 6218 ; 
  848.       break ; 
  849.     case 1 : 
  850.       l = curval + 6751 ; 
  851.       break ; 
  852.     case 2 : 
  853.       l = curval + 3800 ; 
  854.       break ; 
  855.     case 3 : 
  856.       l = curval + 4056 ; 
  857.       break ; 
  858.     } 
  859.   } 
  860.   lab40: ; 
  861.   if ( q == 89 ) 
  862.   scanoptionalequals () ; 
  863.   else if ( scankeyword ( 1199 ) ) 
  864.   ; 
  865.   aritherror = false ; 
  866.   if ( q < 91 ) 
  867.   if ( p < 2 ) 
  868.   {
  869.     if ( p == 0 ) 
  870.     scanint () ; 
  871.     else scandimen ( false , false , false ) ; 
  872.     if ( q == 90 ) 
  873.     curval = curval + eqtb [ l ] .cint ; 
  874.   } 
  875.   else {
  876.       
  877.     scanglue ( p ) ; 
  878.     if ( q == 90 ) 
  879.     {
  880.       q = newspec ( curval ) ; 
  881.       r = eqtb [ l ] .hh .v.RH ; 
  882.       deleteglueref ( curval ) ; 
  883.       mem [ q + 1 ] .cint = mem [ q + 1 ] .cint + mem [ r + 1 ] .cint ; 
  884.       if ( mem [ q + 2 ] .cint == 0 ) 
  885.       mem [ q ] .hh.b0 = 0 ; 
  886.       if ( mem [ q ] .hh.b0 == mem [ r ] .hh.b0 ) 
  887.       mem [ q + 2 ] .cint = mem [ q + 2 ] .cint + mem [ r + 2 ] .cint ; 
  888.       else if ( ( mem [ q ] .hh.b0 < mem [ r ] .hh.b0 ) && ( mem [ r + 2 ] 
  889.       .cint != 0 ) ) 
  890.       {
  891.     mem [ q + 2 ] .cint = mem [ r + 2 ] .cint ; 
  892.     mem [ q ] .hh.b0 = mem [ r ] .hh.b0 ; 
  893.       } 
  894.       if ( mem [ q + 3 ] .cint == 0 ) 
  895.       mem [ q ] .hh.b1 = 0 ; 
  896.       if ( mem [ q ] .hh.b1 == mem [ r ] .hh.b1 ) 
  897.       mem [ q + 3 ] .cint = mem [ q + 3 ] .cint + mem [ r + 3 ] .cint ; 
  898.       else if ( ( mem [ q ] .hh.b1 < mem [ r ] .hh.b1 ) && ( mem [ r + 3 ] 
  899.       .cint != 0 ) ) 
  900.       {
  901.     mem [ q + 3 ] .cint = mem [ r + 3 ] .cint ; 
  902.     mem [ q ] .hh.b1 = mem [ r ] .hh.b1 ; 
  903.       } 
  904.       curval = q ; 
  905.     } 
  906.   } 
  907.   else {
  908.       
  909.     scanint () ; 
  910.     if ( p < 2 ) 
  911.     if ( q == 91 ) 
  912.     if ( p == 0 ) 
  913.     curval = multandadd ( eqtb [ l ] .cint , curval , 0 , 2147483647L ) ; 
  914.     else curval = multandadd ( eqtb [ l ] .cint , curval , 0 , 1073741823L ) ; 
  915.     else curval = xovern ( eqtb [ l ] .cint , curval ) ; 
  916.     else {
  917.     
  918.       s = eqtb [ l ] .hh .v.RH ; 
  919.       r = newspec ( s ) ; 
  920.       if ( q == 91 ) 
  921.       {
  922.     mem [ r + 1 ] .cint = multandadd ( mem [ s + 1 ] .cint , curval , 0 , 
  923.     1073741823L ) ; 
  924.     mem [ r + 2 ] .cint = multandadd ( mem [ s + 2 ] .cint , curval , 0 , 
  925.     1073741823L ) ; 
  926.     mem [ r + 3 ] .cint = multandadd ( mem [ s + 3 ] .cint , curval , 0 , 
  927.     1073741823L ) ; 
  928.       } 
  929.       else {
  930.       
  931.     mem [ r + 1 ] .cint = xovern ( mem [ s + 1 ] .cint , curval ) ; 
  932.     mem [ r + 2 ] .cint = xovern ( mem [ s + 2 ] .cint , curval ) ; 
  933.     mem [ r + 3 ] .cint = xovern ( mem [ s + 3 ] .cint , curval ) ; 
  934.       } 
  935.       curval = r ; 
  936.     } 
  937.   } 
  938.   if ( aritherror ) 
  939.   {
  940.     {
  941.       if ( interaction == 3 ) 
  942.       wakeupterminal () ; 
  943.       printnl ( 262 ) ; 
  944.       print ( 1200 ) ; 
  945.     } 
  946.     {
  947.       helpptr = 2 ; 
  948.       helpline [ 1 ] = 1201 ; 
  949.       helpline [ 0 ] = 1202 ; 
  950.     } 
  951.     error () ; 
  952.     return ; 
  953.   } 
  954.   if ( p < 2 ) 
  955.   if ( ( a >= 4 ) ) 
  956.   geqworddefine ( l , curval ) ; 
  957.   else eqworddefine ( l , curval ) ; 
  958.   else {
  959.       
  960.     trapzeroglue () ; 
  961.     if ( ( a >= 4 ) ) 
  962.     geqdefine ( l , 117 , curval ) ; 
  963.     else eqdefine ( l , 117 , curval ) ; 
  964.   } 
  965. void alteraux ( ) 
  966. {alteraux_regmem 
  967.   halfword c  ; 
  968.   if ( curchr != abs ( curlist .modefield ) ) 
  969.   reportillegalcase () ; 
  970.   else {
  971.       
  972.     c = curchr ; 
  973.     scanoptionalequals () ; 
  974.     if ( c == 1 ) 
  975.     {
  976.       scandimen ( false , false , false ) ; 
  977.       curlist .auxfield .cint = curval ; 
  978.     } 
  979.     else {
  980.     
  981.       scanint () ; 
  982.       if ( ( curval <= 0 ) || ( curval > 32767 ) ) 
  983.       {
  984.     {
  985.       if ( interaction == 3 ) 
  986.       wakeupterminal () ; 
  987.       printnl ( 262 ) ; 
  988.       print ( 1204 ) ; 
  989.     } 
  990.     {
  991.       helpptr = 1 ; 
  992.       helpline [ 0 ] = 1205 ; 
  993.     } 
  994.     interror ( curval ) ; 
  995.       } 
  996.       else curlist .auxfield .hh .v.LH = curval ; 
  997.     } 
  998.   } 
  999.